package entity

import (
	. "data/datatype"
	"errors"
)

type BaseScene struct {
	ObjectType int

	mdirty  map[string]interface{}
	mmodify map[string]interface{}

	name string //血量

	//表格定义
}

//获取类型
func (obj *BaseScene) Type(p string) (int, string, error) {
	switch p {

	case "Name":
		return DT_STRING, "string", nil

	default:
		return DT_NONE, "", errors.New("Type(" + p + ") property not found")
	}
}

//通过属性名设置值
func (obj *BaseScene) Set(p string, v interface{}) error {
	switch p {

	case "Name":
		val, ok := v.(string)
		if ok {
			obj.SetName(val)
		} else {
			return errors.New("Set(Name) value type mismatch")
		}

	default:
		return errors.New("Set(" + p + ") property not found")
	}

	return nil
}

//通过属性名获取值
func (obj *BaseScene) Get(p string) (val interface{}, err error) {
	switch p {

	case "Name":
		return obj.name, nil

	default:
		return nil, errors.New("Get(" + p + ") property not found")
	}
}

//是否需要同步到其它客户端
func (obj *BaseScene) IsPublic(p string) bool {
	switch p {

	case "Name":
		return true

	default:
		return false
	}
}

//是否需要同步到自己的客户端
func (obj *BaseScene) IsPrivate(p string) bool {
	switch p {

	case "Name":
		return true

	default:
		return false
	}
}

//是否需要存档
func (obj *BaseScene) IsSave(p string) bool {
	switch p {

	default:
		return false
	}
}

//脏标志(数据保存用)
func (obj *BaseScene) setDirty(p string, v interface{}) {
	obj.mdirty[p] = v
}

func (obj *BaseScene) GetDirty() map[string]interface{} {

	return obj.mdirty
}

func (obj *BaseScene) ClearDirty() {
	for k := range obj.mdirty {
		delete(obj.mdirty, k)
	}
}

//修改标志(数据同步用)
func (obj *BaseScene) setModify(p string, v interface{}) {
	obj.mmodify[p] = v
}

func (obj *BaseScene) GetModify() map[string]interface{} {
	return obj.mmodify
}

func (obj *BaseScene) ClearModify() {
	for k := range obj.mmodify {
		delete(obj.mmodify, k)
	}
}

//血量
func (obj *BaseScene) SetName(v string) {
	obj.name = v
	obj.setModify("Name", v)

}

func (obj *BaseScene) GetName() string {
	return obj.name
}

//初始化所有的表格
func (obj *BaseScene) initRec() {

}

//获取某个表格
func (obj *BaseScene) GetRec(rec string) interface{} {
	switch rec {

	default:
		return nil
	}
}

//由子类调用的初始化函数
func (obj *BaseScene) baseInit(dirty, modify map[string]interface{}) {
	//初始化表格
	obj.initRec()

	obj.mdirty = dirty
	obj.mmodify = modify

}

//创建函数
func CreateBaseScene() *BaseScene {
	obj := &BaseScene{}
	obj.ObjectType = SCENE
	obj.initRec()

	obj.mdirty = make(map[string]interface{})
	obj.mmodify = make(map[string]interface{})
	return obj
}
